const express = require('express');
const router = express.Router();
const authMiddleware = require('../middleware/auth');
const fs = require('fs');
const path = require('path');

// 获取文件列表
router.get('/list', authMiddleware, (req, res) => {
  const userRootPath = req.user.root_path;
  const rootPath = path.join(__dirname, '..', userRootPath);
  fs.readdir(rootPath, (err, files) => {
    if (err) {
      console.error('获取文件列表失败', err);
      res.status(500).json({ error: '获取文件列表失败' });
    } else {
      res.json({ message: '获取文件列表成功', files });
    }
  });
});

// 上传文件
router.post('/upload', authMiddleware, (req, res) => {
  const userRootPath = req.user.root_path;
  const rootPath = path.join(__dirname, '..', userRootPath);
  const file = req.body.file;
  const filename = path.basename(file);
  //解析文件内容
  fs.readFile(file, (err, data) => {
    if (err) {
      res.status(500).json({ error: '解析文件内容失败' });
    } else {
      // 将文件写入到服务器
      fs.writeFile(rootPath + '/' + filename, data, (err) => {
        if (err) {
          console.error('上传文件失败', err);
          res.status(500).json({ error: '上传文件失败' });
        } else {
          res.json({ message: '上传文件成功' });
        }
      });
    }
  });
});

// 下载文件
router.get('/download', authMiddleware, (req, res) => {
  const userRootPath = req.user.root_path;
  const rootPath = path.join(__dirname, '..', userRootPath);
  const filename = req.query.filename;
  res.download(rootPath + '/' + filename, (err) => {
    if (err) {
      console.error('下载文件失败', err);
      res.status(500).json({ error: '下载文件失败' });
    }
  });
});


//删除文件
router.delete('/delete', authMiddleware, (req, res) => {
  const userRootPath = req.user.root_path;
  const rootPath = path.join(__dirname, '..', userRootPath);
  const filename = req.query.filename;
  fs.unlink(rootPath + '/' + filename, (err) => {
    if (err) {
      console.error('删除文件失败', err);
      res.status(500).json({ error: '删除文件失败' });
    } else {
      res.json({ message: '删除文件成功' });
    }
  });
});

// 重命名文件
router.put('/rename', authMiddleware, (req, res) => {
  const userRootPath = req.user.root_path;
  const rootPath = path.join(__dirname, '..', userRootPath);
  const filename = req.query.filename;
  const newFilename = req.body.newFilename;
  fs.rename(rootPath + '/' + filename, rootPath + '/' + newFilename, (err) => {
    if (err) {
      console.error('重命名文件失败', err);
      res.status(500).json({ error: '重命名文件失败' });
    } else {
      res.json({ message: '重命名文件成功' });
    }
  });
});

//创建文件夹
router.post('/createFolder', authMiddleware, (req, res) => {
  const userRootPath = req.user.root_path;
  const rootPath = path.join(__dirname, '..', userRootPath);
  const folderName = req.body.folderName;
  fs.mkdir(rootPath + '/' + folderName, (err) => {
    if (err) {
      console.error('创建文件夹失败', err);
      res.status(500).json({ error: '创建文件夹失败' });
    } else {
      res.json({ message: '创建文件夹成功' });
    }
  });
});

// 删除文件夹,删除文件夹时,文件夹下的文件也会被删除
router.delete('/deleteFolder', authMiddleware, (req, res) => {
  const userRootPath = req.user.root_path;
  const rootPath = path.join(__dirname, '..', userRootPath);
  const folderName = req.query.folderName;
  fs.rmdir(rootPath + '/' + folderName, { recursive: true }, (err) => {
    if (err) {
      console.error('删除文件夹失败', err);
      res.status(500).json({ error: '删除文件夹失败' });
    } else {
      res.json({ message: '删除文件夹成功' });
    }
  });
});

//修改文件夹名称
router.put('/renameFolder', authMiddleware, (req, res) => {
  const userRootPath = req.user.root_path;
  const rootPath = path.join(__dirname, '..', userRootPath);
  const folderName = req.query.folderName;
  const newFolderName = req.body.newFolderName;
  fs.rename(rootPath + '/' + folderName, rootPath + '/' + newFolderName, (err) => {
    if (err) {
      console.error('修改文件夹名称失败', err);
      res.status(500).json({ error: '修改文件夹名称失败' });
    } else {
      res.json({ message: '修改文件夹名称成功' });
    }
  });
});

// 返回服务器文件夹绝对路径
router.get('/showServerDir', authMiddleware, (req, res) => {
  const userRootPath = path.join(__dirname, '..', req.user.root_path);
  res.json({ message: '当前服务器文件夹路径', userRootPath });
});

// 修改服务器目录
router.get('/changeServerDir', authMiddleware, (req, res) => {
  const userRootPath = req.query.dir;
  req.user.root_path = userRootPath.split('\\').slice(-2).join('/');
  res.json({ message: '修改服务器文件夹路径成功', userRootPath });
});

module.exports = router;
